#ifndef __PAGRLIBPREPROCESSOR_HPP__
#define __PAGRLIBPREPROCESSOR_HPP__

//网页库预处理类，根据网页库和网页偏移库
//通过网页去重生成新的网页库和网页偏移库
//并生成倒排索引库

/* #include "../include/split_tool.hpp" */
#include "../include/web_page.hpp"

#include <utility>
#include <memory>
#include <set>

using std::pair;
using std::shared_ptr;
using std::unique_ptr;
using std::set;

namespace gcj
{

class PageLibPreprocessor
{
public:
    PageLibPreprocessor();      //构造函数
    void doProcess();           //执行预处理
    void readInfoFromFile();    //读取网页库和位置偏移库的内容
    void cutRedundantPages();   //对冗余的网页进行去重
    void buildInvertIndexTable();//创建倒排索引表
    void storeOnDisk();         //将经过预处理后的网页库、位置偏移库和倒排索引库写回到磁盘
    void test();

private:
    vector<shared_ptr<WebPage>> _pageLib;       //网页库的容器对象
    unordered_map<long, pair<int, int>> _offsetLib;     //网页偏移库对象
    unordered_map<string, 
        set<pair<long, double>>> _invertIndexTable;  //倒排索引对象
};

}//end of namespace gcj

#endif
